package com.wande.dataplatform.service;

import com.wande.dataplatform.domain.DataModel;

import java.util.List;
import java.util.Map;

/**
 * Doris 数据仓库服务接口
 * 
 * @author ruoyi
 */
public interface IDorisService {

    /**
     * 创建数据库
     * 
     * @param dbName 数据库名称
     */
    void createDatabase(String dbName);

    /**
     * 删除数据库
     * 
     * @param dbName 数据库名称
     */
    void dropDatabase(String dbName);

    /**
     * 检查数据库是否存在
     * 
     * @param dbName 数据库名称
     * @return 是否存在
     */
    boolean databaseExists(String dbName);

    /**
     * 获取所有数据库列表
     * 
     * @return 数据库名称列表
     */
    List<String> listDatabases();

    /**
     * 根据数据模型创建表
     * 
     * @param dbName 数据库名称
     * @param dataModel 数据模型
     */
    void createTable(String dbName, DataModel dataModel);

    /**
     * 删除表
     * 
     * @param dbName 数据库名称
     * @param tableName 表名
     */
    void dropTable(String dbName, String tableName);

    /**
     * 检查表是否存在
     * 
     * @param dbName 数据库名称
     * @param tableName 表名
     * @return 是否存在
     */
    boolean tableExists(String dbName, String tableName);

    /**
     * 获取数据库中的所有表
     * 
     * @param dbName 数据库名称
     * @return 表名列表
     */
    List<String> listTables(String dbName);

    /**
     * 获取表结构信息
     * 
     * @param dbName 数据库名称
     * @param tableName 表名
     * @return 表结构信息
     */
    Map<String, Object> getTableSchema(String dbName, String tableName);

    /**
     * 为租户创建独立数据库
     * 
     * @param tenantId 租户ID
     * @return 数据库名称
     */
    String createTenantDatabase(Long tenantId);

    /**
     * 获取租户数据库名称
     * 
     * @param tenantId 租户ID
     * @return 数据库名称
     */
    String getTenantDatabaseName(Long tenantId);

    /**
     * 测试 Doris 连接
     * 
     * @return 连接是否正常
     */
    boolean testConnection();

    /**
     * 执行查询SQL
     * 
     * @param sql SQL语句
     * @return 查询结果
     */
    List<Map<String, Object>> executeQuery(String sql);

    /**
     * 执行更新SQL
     * 
     * @param sql SQL语句
     * @return 影响行数
     */
    int executeUpdate(String sql);

}
